package main

import (
	"fmt"
	"math"
)

// uint 在 32位操作系统上为 uint32, 64位 则为 uint64
// int 在 32位操作系统上为 int32, 64位 则为 int64
// uintptr 无符号整型, 用于存放指针

func main() {
	// 无符号 8位 整型 (0 ~ 255)
	var ui8Min uint8 = 0
	var ui8Max uint8 = math.MaxUint8
	fmt.Printf("uint8 无符号 8位整型 min: %v, max: %v\n", ui8Min, ui8Max)

	// 无符号 16位 整型 (0 ~ 65535)
	var ui16Min uint16 = 0
	var ui16Max uint16 = math.MaxUint16
	fmt.Printf("uint16 无符号 16位整型 min: %v, max: %v\n", ui16Min, ui16Max)

	// 无符号 32位 整型 (0 ~ 4294967295)
	var ui32Min uint32 = 0
	var ui32Max uint32 = math.MaxUint32
	fmt.Printf("uint32 无符号 32位整型 min: %v, max: %v\n", ui32Min, ui32Max)

	// 无符号 64位 整型 (0 ~ 18446744073709551615)
	var ui64Min uint64 = 0
	var ui64Max uint64 = math.MaxUint64
	fmt.Printf("uint64 无符号 64位整型 min: %v, max: %v\n", ui64Min, ui64Max)

	fmt.Println("=========================================================")

	// 有符号 8位整型 (-128 ~ 127)
	var i8Min int8 = math.MinInt8
	var i8Max int8 = math.MaxInt8
	fmt.Printf("int8 有符号 8位整型 min: %v, max: %v\n", i8Min, i8Max)

	// 有符号 16位整型 (-32768 ~ 32767)
	var i16Min int16 = math.MinInt16
	var i16Max int16 = math.MaxInt16
	fmt.Printf("int16 有符号 16位整型 min: %v, max: %v\n", i16Min, i16Max)

	// 有符号 32位整型 (-2147483648 ~ 2147483647)
	var i32Min int32 = math.MinInt32
	var i32Max int32 = math.MaxInt32
	fmt.Printf("int32 有符号 32位整型 min: %v, max: %v\n", i32Min, i32Max)

	// 有符号 64位整型 (-9223372036854775808 ~ 9223372036854775807)
	var i64Min int64 = math.MinInt64
	var i64Max int64 = math.MaxInt64
	fmt.Printf("int64 有符号 64位整型 min: %v, max: %v\n", i64Min, i64Max)

	fmt.Println("=========================================================")

	// golang 中 无法直接定义 二进制数
	// 十进制
	base := 10
	// 八进制
	base = 012
	// 十六进制
	base = 0xA

	// 输出时可用 %b %o %d %x 格式化输出 二、八、十、十六进制数
	fmt.Printf("二进制 => %b, 八进制 => %o, 十进制 => %d, 十六进制 => %x\n", base, base, base, base)
}
